fix(theme): correct dark/light mode check on Win10
authorJyrki Gadinger <nilsding@nilsding.org>
Tue, 15 Apr 2025 08:13:14 +0000 (10:13 +0200)
committerJyrki Gadinger <nilsding@nilsding.org>
Tue, 15 Apr 2025 12:26:53 +0000 (14:26 +0200)
`Utility::registryGetKeyValue` returns an invalid QVariant should the
key not exist -- which is the case if that switch has never been toggled
before.

--> Fix this by ensuring the QVariant is valid, and only then try to
convert it to a bool.

Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
src/libsync/theme.cpp

index 9e90a0002e36006c180f1424653f98301a92e409..f1a7108bdeb68eb404d3c3a3ccdd03a6aa25a9e0 100644 (file)
@@ -1032,10 +1032,11 @@ bool Theme::darkMode() const
 
 #ifdef Q_OS_WIN
     static const auto darkModeSubkey = QStringLiteral("Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize");
-    if (!isWindows11OrGreater() &&
-        Utility::registryKeyExists(HKEY_CURRENT_USER, darkModeSubkey) &&
-        !Utility::registryGetKeyValue(HKEY_CURRENT_USER, darkModeSubkey, QStringLiteral("AppsUseLightTheme")).toBool()) {
-        return true;
+    if (!isWindows11OrGreater() && Utility::registryKeyExists(HKEY_CURRENT_USER, darkModeSubkey)) {
+        if (const auto keyVariant = Utility::registryGetKeyValue(HKEY_CURRENT_USER, darkModeSubkey, QStringLiteral("AppsUseLightTheme"));
+            keyVariant.isValid() && !keyVariant.toBool()) {
+            return true;
+        }
     }
 #endif
     return isDarkFromStyle();